# mixins.py
from rest_framework.exceptions import PermissionDenied, ValidationError


class TenantViewSetMixin:
    """
    多租户视图基类：自动过滤和设置 tenant
    """
    def get_queryset(self):
        user = self.request.user
        if user.is_superuser:
            return super().get_queryset()
        if not hasattr(user, 'tenant') or user.tenant is None:
            return self.queryset.none()  # 安全：返回空集
        return super().get_queryset().filter(tenant=user.tenant)

    def perform_create(self, serializer):
        user = self.request.user
        # 超级用户可指定 tenant，普通用户自动绑定
        if user.is_superuser:
            tenant = serializer.validated_data.get('tenant', user.tenant)
            if tenant is None:
                raise PermissionDenied("超级用户需显式指定 tenant 或自身有默认租户。")
        else:
            if not hasattr(user, 'tenant') or user.tenant is None:
                raise PermissionDenied("当前用户未分配租户，无法创建资源。")
            tenant = user.tenant

        serializer.save(tenant=tenant)

    def get_tenant_context(request):
        if not request.user.is_authenticated:
            raise ValidationError("User not authenticated")
        return {'tenant': request.user.tenant}